package tools

import "time"

// SinceAsSecFloat 计算从开始时间到当前的历时，以秒为单位精确到毫秒
func SinceAsSecFloat(start time.Time) float64 {
	return float64(time.Since(start)/time.Millisecond) / 1000
}

// ParseUTC8Str 按 UTF-8 解析时间字符串
func ParseUTC8Str(dateStr string) (time.Time, error) {
	loc := time.FixedZone("UTC+8", 8*60*60)
	t, err := time.ParseInLocation("2006-01-02 15:04:05", dateStr, loc) // 用户传过来的是东八区的时间
	return t, err
}

// 计算时间差
func GetDaysBetween2Date(format, date1Str, date2Str string) (int, error) {
	// 将字符串转化为Time格式
	date1, err := time.ParseInLocation(format, date1Str, time.Local)
	if err != nil {
		return 0, err
	}
	// 将字符串转化为Time格式
	date2, err := time.ParseInLocation(format, date2Str, time.Local)
	if err != nil {
		return 0, err
	}
	//计算相差天数
	return int(date1.Sub(date2).Hours() / 24), nil
}

// 计算两个自然日的天数
func DiffNatureDays(t1, t2 time.Time) (day int) {
	loc := time.FixedZone("UTC+8", 8*60*60)
	t1, _ = time.ParseInLocation("2006-01-02 15:04:05", t1.Format("2006-01-02")+" 23:59:59", loc)
	t2, _ = time.ParseInLocation("2006-01-02 15:04:05", t2.Format("2006-01-02")+" 23:59:59", loc)
	swap := false
	if t1.Unix() < t2.Unix() {
		t_ := t1
		t1 = t2
		t2 = t_
		swap = true
	}
	day = int(t1.Sub(t2).Hours() / 24)
	// // 计算在被24整除外的时间是否存在跨自然日
	// if int(t1.Sub(t2).Milliseconds())%86400000 > int(86400000-t2.Unix()%86400000) {
	// 	day += 1
	// }
	if swap {
		day = -day
	}

	return
}
